uart_puts を消すと動かない問題
以下の uart_puts をコメントアウトすると sample/pi.ml が動かなくなってしまう。なぜに...
code:stub.c
int main(void) {
uart_init();
uart_puts("Hello from QEMU mps2-an505 Cortex-M33!\n");
min_caml_start((char *)min_caml_stack, (char *)min_caml_heap);
while (1) {
}
}
ChatGPTに相談しつつ調査。以下の対応でうまく動くようになった。
code:diff
diff --git a/stub.c b/stub.c
index 1388380..3d37b66 100644
--- a/stub.c
+++ b/stub.c
@@ -55,6 +55,8 @@ static void uart_init(void) {
}
static void uart_putc(char c) {
+ while (UART0->STATE & (1u << 0)) { // TXFULL
+ }
UART0->DATA = (uint32_t)c;
}
@@ -94,8 +96,6 @@ int min_caml_int_of_float(float f) {
int main(void) {
uart_init();
- uart_puts("Hello from QEMU mps2-an505 Cortex-M33!\n");
-
min_caml_start((char *)min_caml_stack, (char *)min_caml_heap);
while (1) {